/**
 *	@file	pgmap_sub.h
 *	@brief	ポケギアマップ　サブ関数群
 *	@author	Miyuki Iwasawa
 *	@
 */

#ifndef __H_PGMAP_SUB_H__
#define __H_PGMAP_SUB_H__

/**
 *	@brief	ポケギアマップ　アプリVBlank処理関数
 */
extern void PGMapSub_VBlank(PGEAR_SYS_WORK* sys_wk,void* app_wk);

/**
 *	@brief	スクロール座標から見えるエリアを特定
 */
extern void PGMapSub_SetViewAreaFromScroll(PGMAP_SYS_WORK* wk);

/**
 *	@brief	マーカー編集画面呼び出し時のパラメータ保存
 */
extern void PGMapSub_MapParamPush(PGMAP_SYS_WORK* wk);

/*
 *	@brief	マーカー編集画面からのマップ画面への復帰時パラメータ書き戻し
 */
extern void PGMapSub_MapParamPop(PGMAP_SYS_WORK* wk);

/**
 *	@brief	サブ画面内の指定座標が属するグリッドラインを返す
 *
 *	@param	f_aff	拡縮フラグ
 *	@param	x		サブ画面内でのドット位置x
 *	@param	y		サブ画面内でのドット位置y
 */
extern void PGMapSub_GetPosLine(PGMAP_SYS_WORK* wk,s16 x,s16 y,u16 *lineX,u16 *lineY);

/**
 *	@brief	現ターゲット位置にカーソル座標をあわせる
 */
extern void PGMapSub_SetCursor2TargetPos(PGMAP_SYS_WORK* wk);

/**
 *	@brief	スクロールリミットを考慮して、移動先座標を取得
 */
extern void PGMapSub_GetAffMovePos(PGMAP_SYS_WORK* wk,u8 affine,u16 tx,u16 tz,s16 curX,s16 curY);


/*
 *	@brief	指定したスクロールパラメータをメインマップスクロール座標に反映
 *	@
 */
extern void PGMapSub_MapBGScrollSet(PGMAP_SYS_WORK* wk,_SCROLL* pScrl);

/**
 *	@brief	拡縮センター座標を求める
 */
extern void PGMapSub_GetAffineCenter(PGMAP_SYS_WORK* wk,
		u16 tx,u16 tz,s16 cur_x,s16 cur_y,int* centerX,int* centerY);

/*
 *	@brief	ブロック座標からメインマップスクロール座標の決定
 *	@
 */
extern void PGMapSub_MapBGIniScrollCalc(PGMAP_SYS_WORK* wk);

/**
 *	@brief	指定したスクロールパラメータをマップの連動OBJに反映
 *
 *	@param	dx	相対x座標
 *	@param	dy	相対y座標
 */
extern void PGMapSub_MapObjScrollSet(PGMAP_SYS_WORK* wk,s16 dx,s16 dy);

/**
 *	@brief	メイン画面アプリフェード
 *
 *	@param	0:フェードイン,1:フェードアウト
 *	＊フェード終了後に呼ばれても問題ないように組んでおく
 */
extern int PGMapSub_PalFadeWait(PGMAP_SYS_WORK* wk,u8 mode);

/*
 *	@brief	サブ画面スクロール セット
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
extern void PGMapSub_GuideScrollSet(PGMAP_SYS_WORK* wk,u8 mode);

/*
 *	@brief	サブ画面スクロール　終了待ち
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
extern int PGMapSub_GuideScrollWait(PGMAP_SYS_WORK* wk,u8 mode);

/*
 *	@brief	メインマーク編集画面スクロールセット
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
extern void PGMapSub_MarkScrollSet(PGMAP_SYS_WORK* wk,u8 mode);

/*
 *	@brief	マーク画面スクロール　終了待ち
 *	@param	wk	マップワークへのポインタ
 *	@param	mode	0:展開,1:格納
 */
extern int PGMapSub_MarkScrollWait(PGMAP_SYS_WORK* wk,u8 mode);


/**
 *	@brief	マーキングアイコン　ポジション＆Viewセット
 *
 *	@param	mode	0:posにポジションセット,1:ex,eyにポジションセット
 */
extern void PGMapSub_MarkPosViewSet(PGMAP_SYS_WORK* wk,u8 mode);

/**
 *	@brief	空を飛ぶアイコンセット
 */
extern void PGMapSub_SkyPosViewSet(PGMAP_SYS_WORK* wk,u8 mode);

/**
 *	@brief	マーク画面In/Out時　OBJ描画コントロール
 *	@param	mode	0:in,1:out
 */
extern void PGMapSub_MapObjSetIOMark(PGMAP_SYS_WORK* wk,u8 mode);

/**
 *	@brief	マーキング可能なゾーンかどうかのチェック
 */
extern BOOL PGMapSub_IsMarkingEnable(PGMAP_SYS_WORK* wk,TARGET_ZONE* ptz);

/*
 *	@brief	現在のターゲットゾーンを取得
 */
extern MAP_ZONE_PARAM* PGMapSub_GetZoneParam(PGMAP_SYS_WORK* wk,u8 tx,u8 tz);

/*
 *	@brief	ゾーンIDからゾーンパラメータを取得
 */
extern MAP_ZONE_PARAM* PGMapSub_GetZoneParamFromID(PGMAP_SYS_WORK* wk,u16 zone);

/*
 *	@brief	現在のターゲットゾーンデータを取得
 */
extern void PGMapSub_GetNowZone(PGMAP_SYS_WORK* wk,TARGET_ZONE* pp,u8 tx,u8 tz);

/**
 *	@brief	座標からタウンパラメータを取得
 */
extern TMAP_TOWN_PARAM* PGMapSub_GetTownParam(PGMAP_SYS_WORK* wk,u8 tx,u8 tz);

/**
 *	@brief	プレイヤーがいる地方のチェック
 */
extern BOOL PGMapSub_PlayerLocalCheck(PGMAP_SYS_WORK* wk,u16 tx,u16 tz);

/**
 *	@brief	その場所に飛んでいいかどうかチェック
 *
 *	@retval	飛ぶゾーンを返す(0なら違う)
 */
extern int PGMapSub_JumpTargetCheck(PGMAP_SYS_WORK* wk,u16 tx,u16 tz);

/*
 *	@brief	現在のターゲットゾーンデータを取得
 */
extern int PGMapSub_GetNowZoneSky(PGMAP_SYS_WORK* wk,TARGET_ZONE* pp,u8 tx,u8 tz);

/**
 *	@brief	ターゲットゾーンの上画面ガイドを描画
 **/
extern void PGMapSub_DrawGuide(PGMAP_SYS_WORK* wk,BOOL bgmode_f);

/**
 *	@brief	ターゲットゾーンの上画面ガイドを描画(空を飛ぶ)
 **/
extern void PGMapSub_DrawGuideSky(PGMAP_SYS_WORK* wk);

/**
 *	@brief	ターゲットゾーンの下画面ガイドを描画
 *
 *	@param	flag	TRUEなら地名も書き換える
 **/
extern void PGMapSub_DrawEditGuide(PGMAP_SYS_WORK* wk,u8 flag);

/**
 *	@brief	タウン表示状態の初期描画
 */
extern void PGMapSub_DrawTownMap(PGMAP_SYS_WORK* wk);

/**
 *	@brief	ターゲットゾーンのハイライト表示
 */
extern void PGMapSub_DrawTargetZoneHilight(PGMAP_SYS_WORK* wk,u8 mode);

/**
 *	@brief	システムキーモードからアプリキーモードへの描画切替
 */
extern void PGMapSub_ToAppKeyChange(void* app_wk);

/**
 *	@brief	アプリキーモードからシステムキーモードへの描画切替
 */
extern void PGMapSub_ToSysKeyChange(void* app_wk);

/**
 *	@brief	マップのキーからタッチへの描画切替
 */
extern void PGMapSub_ToTouchChangeMap(void* app_wk);

/**
 *	@brief	マップのタッチからキーへの描画切替
 */
extern void PGMapSub_ToKeyChangeMap(void* app_wk);

/**
 *	@brief	マークのキーからタッチへの描画切替
 */
extern void PGMapSub_ToTouchChangeMark(void* app_wk);

/**
 *	@brief	マークのタッチからキーへの描画切替
 */
extern void PGMapSub_ToKeyChangeMark(void* app_wk);

/**
 *	@brief	マップ画面 ボタンパネルの描画ステート変更
 */
extern void PGMapSub_MapPanelStChange(PGMAP_SYS_WORK* wk,u8 mode,u8 st);

/**
 *	@brief	セレクトボックスの表示
 */
extern void PGMapSub_SkySelBoxSet(PGMAP_SYS_WORK* wk,u16 tx);

/**
 *	@brief	操作説明メッセージ描画
 */
extern void PGMapSub_PrintExpMsg(PGMAP_SYS_WORK* wk,int zone);

#endif //__H_PGMAP_SUB_H__